package com.cskaoyan.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;

/**
 * @author stone
 * @date 2022/03/22 14:57
 */
//我们需要做的事情就是在切面组件中写通知方法，来写执行的业务是业务
@Component
public class HelloWorldAspect {

    public void hello() {//before通知方法
        System.out.println("before");
    }

    public void world() {//after通知方法
        System.out.println("after");
    }

    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("around前半部分");
        //委托类方法
        Object proceed = joinPoint.proceed();//类似于method.invoke 、methodInvocation.proceed
        System.out.println("around后半部分");
        return proceed + "?";//返回值作为代理对象的执行结果
    }

    //可以拿到委托类方法的执行结果
    public void afterReturning(Object result) {
        System.out.println("afterReturning" + result);
    }

    //可以获得抛出的异常对象
    public void afterThrowing(Exception exception) {
        System.out.println("抛出异常：" + exception.getMessage());

    }
}
